字符串问题汇总

 
	
public boolean isPalindrome(String s) {
		if (s == null || s.isEmpty()) {
			return true;
		}
		int l = 0, r = s.length() - 1;
		while (l < r) {
			// find left alphanumeric character
			if (!Character.isLetterOrDigit(s.charAt(l))) {
				l++;
				continue;
			}
			// find right alphanumeric character
			if (!Character.isLetterOrDigit(s.charAt(r))) {
				r--;
				continue;
			}
			// case insensitive compare
			if (Character.toLowerCase(s.charAt(l)) == Character.toLowerCase(s.charAt(r))) {
				l++;
				r--;
			} else {
				return false;
			}
		} 
		return true;
	}



public static List<List<String>> groupAnagrams(String[] strs) {
		List<List<String>> result = new ArrayList<List<String>>();
		if (strs == null) return result;
		// one key to multiple value multiMap
		Map<String, ArrayList<String>> multiMap = new HashMap<String, ArrayList<String>>();
		for (String str : strs) {
		char[] strChar = str.toCharArray();
		Arrays.sort(strChar);
		String strSorted = String.valueOf(strChar);
		if (multiMap.containsKey(strSorted)) {
		ArrayList<String> aList = multiMap.get(strSorted);
		aList.add(str);
		multiMap.put(strSorted, aList);
		} 
		else {
				ArrayList<String> aList = new ArrayList<String>();
				aList.add(str);
				multiMap.put(strSorted, aList);
			}
		} // add List group to result
		Set<String> keySet = multiMap.keySet();
		for (String key : keySet) {
		ArrayList<String> aList = multiMap.get(key);
		Collections.sort(aList);
		result.add(aList);
			} 
			return result;
		}


public static boolean isAnagrams3(String source,String target){
		HashMap<Character, Integer> map=new HashMap<>();
		
		for(Character c: source.toCharArray()){
			map.put(c, map.getOrDefault(c, 0)+1);
		}
		for(Character c:target.toCharArray()){
			map.put(c, map.getOrDefault(c, 0)-1);			
		}
		for(Character c:map.keySet()){
			if(map.get(c)>0){
				return false;
			}
		}
		return true;
	}

public static boolean isAnagrams2(String source,String target){
		int[]count=new int[256];
		for(int i=0;i<source.length();i++){
			count[source.charAt(i)-' ']++;
		}
		for(int i=0;i<target.length();i++){
			count[target.charAt(i)-' ']--;
		}
		for(int c:count){
			if(c!=0){
				return false;
			}
		}
		return true;
	}
	public static boolean isAnagrams(String source,String target){
		if(source==null||target==null||source.length()!=target.length()){
			return false;
		}
		char[]chs_s=source.toCharArray();
		char[]chs_t=target.toCharArray();
		Arrays.sort(chs_s);
		Arrays.sort(chs_t);
		if(String.valueOf(chs_s).equals(String.valueOf(chs_t))){
			return true;
		}
		return false;
	}
	public static int strStr(String source ,String target){
		if(source==null||target==null){
			return -1;
		}
		
		int i,j;
		for(i=source.length()-1;i>=0;i--){
			for(j=i;j<source.length();j++){
				System.out.println(source.substring(i,j+1));
				if(source.substring(i, j+1).equals(target)){
//					System.out.println(source.substring(i,j+1));
					return 1;
				}
			}
		}
		return -1;
	}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值