• LeetCode之字符串处理题java


    344. Reverse String

    Write a function that takes a string as input and returns the string reversed.

    Example:
    Given s = "hello", return "olleh".

    Subscribe to see which companies asked this question

    public class Solution {
        public String reverseString(String s) {
            if(s==null)
                return "";
            char c[] = s.toCharArray();
            int len = s.length();
            int i=0;
            int j=len-1;
            while(i<j){
                char tmp = c[i];
                c[i] = c[j];
                c[j] = tmp;
                ++i;
                --j;
            }
            return new String(c);
        }
    }

    345. Reverse Vowels of a String 

    Total Accepted: 4116 Total Submissions: 11368 Difficulty: Easy

    Write a function that takes a string as input and reverse only the vowels of a string.

    Example 1:
    Given s = "hello", return "holle".

    Example 2:
    Given s = "leetcode", return "leotcede".

    Subscribe to see which companies asked this question

    采用快排的partition函数来对字符串进行翻转
    public class Solution {
        public  String reverseVowels(String s) {
            if(s==null){
                return "";
            }
            char[] c = s.toCharArray();
            int left = 0;
            int right = c.length-1;
            while(left<right){
                while(left<right&&!isVowel(c[left])){
                    ++left;
                }
                while(left<right&&!isVowel(c[right])){
                    --right;
                }
                char tmp = c[left];
                c[left] = c[right];
                c[right] = tmp;
                ++left;
                --right;
            }
            return new String(c);
        }
      //检查一个字符是否是元音字符
    public boolean isVowel(char c){ if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u'||c=='A'||c=='E'||c=='I'||c=='O'||c=='U') return true; else return false; } }

    168. Excel Sheet Column Title

    Given a positive integer, return its corresponding column title as appear in an Excel sheet.

    For example:

        1 -> A
        2 -> B
        3 -> C
        ...
        26 -> Z
        27 -> AA
        28 -> AB 

    解题思路:26进制操作
      当n=1时,(n-1)%26+'A'='A';
      当n=26时,(n-1)%26+'A'='Z';
      当n=27时,进1,进位carry = (n-1)/26=1-->‘A’;依次循环
    public class Solution {
        public String convertToTitle(int n) {
            StringBuilder str = new StringBuilder();
            if (n<=0){
                return " ";
            }
            while(n!=0){
                str.append((char)((n-1)%26 + 'A'));
                n = (n-1)/26;
            }
            return str.reverse().toString();
        }
    }

    242. Valid Anagram

    Given two strings s and t, write a function to determine if t is an anagram of s.

    For example,
    s = "anagram", t = "nagaram", return true.
    s = "rat", t = "car", return false.

     解题思路一:
    简易的哈希表,将每个字符串使用哈希表统计每个字符串中的数据,接着,校验两个哈希表中的字母的数量是否一致,如果所有的都一致,则为true,否则为false。这样,时间复杂度为O(n),空间消耗为256*2,空间复杂度为O(n)
    public boolean isAnagram(String s, String t) {
            if(s==null||t==null)
                return false;
            int count_s[] = count(s);
            int count_t[] = count(t);
            for(int i=0;i<count_t.length;i++){
                if(count_t[i]==count_s[i]){
                    continue;
                }else{
                    return false;
                }
            }
            return true;
        }
        
        public int[] count(String str){
            if(str==null&&str.length()==0){
                return null;
            }
            int[] count = new int[256];
            for(int i=0;i<str.length();i++){
                count[str.charAt(i)]++;
            }
            return count;
        }

    389. Find the Difference

    Given two strings s and t which consist of only lowercase letters.

    String t is generated by random shuffling string s and then add one more letter at a random position.

    Find the letter that was added in t.

    Example:

    Input:
    s = "abcd"
    t = "abcde"
    
    Output:
    e
    
    Explanation:
    'e' is the letter that was added.
     思路1:
      采用异或操作,相同的字符异或结果为0,因为t是s中的字符随机排列后在随机增加一个字符后的字符串,两个字符串通过异或,最后的结果就是唯一不同的字符;
    思路2:
      采用+/-操作,在t字符串中各字符使用+,再- s中字符串中各字符,最后剩下的就是唯一不同的字符;
    //采用异或的方法:
    public
    class Solution { public char findTheDifference(String s, String t) { char c = 0; for(int i=0;i<s.length();i++){ c ^= s.charAt(i); } for(int i=0;i<t.length();i++){ c ^= t.charAt(i); } return c; } }
    //采用+/-的方式
    public
    char findTheDifference(String s, String t) { char res = t.charAt(t.length() - 1); for (int i = 0; i < s.length(); i++) { res += t.charAt(i); res -= s.charAt(i); } return res; }

    383. Ransom Note

    
Given
 an 
arbitrary
 ransom
 note
 string 
and 
another 
string 
containing 
letters from
 all 
the 
magazines,
 write 
a 
function 
that 
will 
return 
true 
if 
the 
ransom 
 note 
can 
be 
constructed 
from 
the 
magazines ; 
otherwise, 
it 
will 
return 
false. 



    Each 
letter
 in
 the
 magazine 
string 
can
 only 
be
 used 
once
 in
 your 
ransom
 note.

    Note:
    You may assume that both strings contain only lowercase letters.

    canConstruct("a", "b") -> false
    canConstruct("aa", "ab") -> false
    canConstruct("aa", "aab") -> true

    思路:统计字符的个数,ransomNote中的各个字符总数是否<=magazine中对应的字符总数;
    public class Solution {
        public boolean canConstruct(String ransomNote, String magazine) {
            int[] count = new int[26];
            for(char c:magazine.toCharArray()){
                count[c-'a']++;
            }
            for(char c:ransomNote.toCharArray()){
                if(--count[c-'a']<0)
                    return false;
            }
            return true;
        }
    }

    387. First Unique Character in a String

    Given a string, find the first non-repeating character in it and return it's index. If it doesn't exist, return -1.

    Examples:

    s = "leetcode"
    return 0.
    
    s = "loveleetcode",
    return 2.

    Note: You may assume the string contain only lowercase letters.

    思路1:1)首先都是小写字母,则使用数组统计每个字符出现的次数;

        2)再次从头到尾遍历字符串,将字符出现次数为1的字符(首次出现)的下标返回;

    public class Solution {
        public int firstUniqChar(String s) {
            if(s==null||s.length()==0)
                return -1;
            int[] count = new int[26];//统计次数
            for(int i=0;i<s.length();i++){
                count[s.charAt(i)-'a']++;
            }
            for(int i=0;i<s.length();i++){
                if(count[s.charAt(i)-'a']==1)
                    return i;
            }
            return -1;
        }
    }

     

  • 相关阅读:
    在Oracle中添加用户 赋权 修改暗码 解锁
    Ubuntu Linux 8.04 Vsftp 假造用户设置
    用一个实例讲解DB2数据库游标轮回的成果
    解说Oracle数据库自动增长列的完成过程
    MSN登录错误“80072efd”解决办法
    再学 GDI+[61]: 路径画刷(1) SetCenterColor、SetSurroundColors
    WinAPI: 测试 BitBlt
    两个 CopyRect
    再学 GDI+[58]: 路径 保存与读取路径数据
    再学 GDI+[62]: 路径画刷(2) SetCenterPoint、GetCenterPoint
  • 原文地址:https://www.cnblogs.com/coffy/p/5434752.html
Copyright © 2020-2023  润新知